#include "LobbyPlayer.h"
#include "LobbyTypes.h"

#include "WONCommon/ReadBuffer.h"
#include "WONCommon/WriteBuffer.h"

using namespace WONAPI;

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
LobbyPlayer::LobbyPlayerFactory LobbyPlayer::mPlayerFactory = LobbyPlayer::DefaultPlayerFactory;

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
LobbyPlayer::LobbyPlayer()
{
	mPing = LobbyPing_None;
	mReady = false;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
LobbyPlayer::~LobbyPlayer()
{
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
LobbyPlayer* LobbyPlayer::CreatePlayer()
{
	return mPlayerFactory();
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
bool LobbyPlayer::ReadData(ReadBuffer &theBuf)
{
	try
	{
		mPing = theBuf.ReadShort();
		mReady = theBuf.ReadBool();
		return ReadDataHook(theBuf);
	}
	catch(ReadBufferException&)
	{
		return false;
	}
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void LobbyPlayer::WriteData(WriteBuffer &theBuf)
{
	theBuf.AppendShort(mPing);
	theBuf.AppendBool(mReady);
	WriteDataHook(theBuf);
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
bool LobbyPlayer::SameTeam(LobbyPlayer *thePlayer)
{
	if(this==thePlayer)
		return true;
	else if(thePlayer==NULL)
		return false;
	else
		return SameTeamHook(thePlayer);
}
